package com.shujia.java.day3;

public class Demo22Fact {
    public static void main(String[] args) {
        /**
         * 计算10的阶乘
         * 1*2*3*4，...*10
         *
         */

        int sum = 1;

        for (int i = 1; i <= 5; i++) {
            sum = sum * i;
        }

        System.out.println("10 的阶乘 " + sum);


        //调用方法
        int s = fact(5);

        System.out.println(s);


        /**
         * 递归能实现的操作循环一般都可以实现
         * 一般不要使用递归，递归比较占用内存
         *
         */
    }

    /**
     * 递归 ：
     * 1、在方法内调用自己
     * 2、需要一个退出条件
     * <p>
     * fact(10)
     * 10 * fact(9)
     * 10 * 9 * fact(8)
     * 10 * 9 * 8 * fact(7)
     * <p>
     * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * fact(1)
     * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
     */

    static int fact(int n) {

        //递归的退出函数
        if (n == 1) {
            return 1;
        }

        return n * fact(n - 1);
    }
}
